/*
 * File      : board.h
 * This file is part of RT-Thread RTOS
 * COPYRIGHT (C) 2009, RT-Thread Development Team
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rt-thread.org/license/LICENSE
 *
 * Change Logs:
 * Date           Author       Notes
 * 2009-09-22     Bernard      add board.h to this bsp
 */

// <<< Use Configuration Wizard in Context Menu >>>
#ifndef __BOARD_H__

#define __BOARD_H__

#include <gd32f4xx.h>
#include <drv_common.h>
#ifdef __cplusplus
extern "C"
{
#endif

#define OTA_UART_NAME "uart5"

#define EXT_SDRAM_BEGIN    (0xC0000000U) /* the begining address of external SDRAM */
#define EXT_SDRAM_END      (EXT_SDRAM_BEGIN + (32U * 1024 * 1024)) /* the end address of external SDRAM */

	/*-------------------------- CHIP CONFIG BEGIN --------------------------*/

#define CHIP_FAMILY_GD32
#define CHIP_SERIES_GD32F4
#define CHIP_NAME_GD32F427

	/*-------------------------- CHIP CONFIG END --------------------------*/

	/*-------------------------- ROM/RAM CONFIG BEGIN --------------------------*/

#define ROM_START              ((uint32_t)0x08000000)
#define ROM_SIZE               (512 * 1024)
#define ROM_END                ((uint32_t)(ROM_START + ROM_SIZE))

#define RAM_START              (0x20000000)
#define RAM_SIZE               (192 * 1024)
#define RAM_END                (RAM_START + RAM_SIZE)

#define RAM1_START              (0x10000000)
#define RAM1_SIZE               (64 * 1024)
#define RAM1_END                (RAM1_START + RAM1_SIZE)

	/*-------------------------- ROM/RAM CONFIG END --------------------------*/

	/*-------------------------- CLOCK CONFIG BEGIN --------------------------*/

#define BSP_CLOCK_SOURCE                  ("HSI")
#define BSP_CLOCK_SOURCE_FREQ_MHZ         ((int32_t)0)
#define BSP_CLOCK_SYSTEM_FREQ_MHZ         ((int32_t)200)

	/*-------------------------- CLOCK CONFIG END --------------------------*/

	/*-------------------------- UART CONFIG BEGIN --------------------------*/

	/** After configuring corresponding UART or UART DMA, you can use it.
	 *
	 * STEP 1, define macro define related to the serial port opening based on the serial port number
	 *                 such as     #define BSP_USING_UART1
	 *
	 * STEP 2, according to the corresponding pin of serial port, define the related serial port information macro
	 *                 such as     #define BSP_UART1_TX_PIN       "PA9"
	 *                             #define BSP_UART1_RX_PIN       "PA10"
	 *
	 * STEP 3, if you want using SERIAL DMA, you must open it in the RT-Thread Settings.
	 *                 RT-Thread Setting -> Components -> Device Drivers -> Serial Device Drivers -> Enable Serial DMA Mode
	 *
	 * STEP 4, according to serial port number to define serial port tx/rx DMA function in the board.h file
	 *                 such as     #define BSP_UART1_RX_USING_DMA
	 *
	 */

#define BSP_USING_UART0
//#define BSP_USING_UART1
#define BSP_USING_UART2

	/*-------------------------- UART CONFIG END --------------------------*/

	/*-------------------------- I2C CONFIG BEGIN --------------------------*/

	/** if you want to use i2c bus(soft simulate) you can use the following instructions.
	 *
	 * STEP 1, open i2c driver framework(soft simulate) support in the RT-Thread Settings file
	 *
	 * STEP 2, define macro related to the i2c bus
	 *                 such as     #define BSP_USING_I2C1
	 *
	 * STEP 3, according to the corresponding pin of i2c port, modify the related i2c port and pin information
	 *                 such as     #define BSP_I2C1_SCL_PIN    GET_PIN(port, pin)   ->   GET_PIN(C, 11)
	 *                             #define BSP_I2C1_SDA_PIN    GET_PIN(port, pin)   ->   GET_PIN(C, 12)
	 */

	/*#define BSP_USING_I2C1*/
#ifdef BSP_USING_I2C1
#define BSP_I2C1_SCL_PIN    GET_PIN(port, pin)
#define BSP_I2C1_SDA_PIN    GET_PIN(port, pin)
#endif

	/*#define BSP_USING_I2C2*/
#ifdef BSP_USING_I2C2
#define BSP_I2C2_SCL_PIN    GET_PIN(port, pin)
#define BSP_I2C2_SDA_PIN    GET_PIN(port, pin)
#endif

	/*-------------------------- I2C CONFIG END --------------------------*/

	/*-------------------------- SPI CONFIG BEGIN --------------------------*/

	/** if you want to use spi bus you can use the following instructions.
	 *
	 * STEP 1, open spi driver framework support in the RT-Thread Settings file
	 *
	 * STEP 2, define macro related to the spi bus
	 *                 such as     #define BSP_USING_SPI1
	 *
	 * STEP 3, copy your spi init function from GD32xxxx_hal_msp.c generated by GD32cubemx to the end of board.c file
	 *                 such as     void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
	 *
	 * STEP 4, modify your GD32xxxx_hal_config.h file to support spi peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_SPI_MODULE_ENABLED
	 */
//#define BSP_USING_SPI0
#define BSP_USING_SPI1
//#define BSP_USING_SPI2
//#define BSP_USING_SPI3

	/*-------------------------- SPI CONFIG END --------------------------*/

	/*-------------------------- QSPI CONFIG BEGIN --------------------------*/

	/** if you want to use qspi you can use the following instructions.
	 *
	 * STEP 1, open qspi driver framework support in the RT-Thread Settings file
	 *
	 * STEP 2, define macro related to the qspi
	 *                 such as     #define BSP_USING_QSPI
	 *
	 * STEP 3, copy your qspi init function from GD32xxxx_hal_msp.c generated by GD32cubemx to the end of board.c file
	 *                 such as     void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi)
	 *
	 * STEP 4, modify your GD32xxxx_hal_config.h file to support qspi peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_QSPI_MODULE_ENABLED
	 *
	 */

	/*#define BSP_USING_QSPI*/

	/*-------------------------- QSPI CONFIG END --------------------------*/

	/*-------------------------- PWM CONFIG BEGIN --------------------------*/

	/** if you want to use pwm you can use the following instructions.
	 *
	 * STEP 1, open pwm driver framework support in the RT-Thread Settings file
	 *
	 * STEP 2, define macro related to the pwm
	 *                 such as     #define BSP_USING_PWM1
	 *
	 * STEP 3, copy your pwm timer init function from GD32xxxx_hal_msp.c generated by GD32cubemx to the end if board.c file
	 *                 such as     void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)  and
	 *                             void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
	 *
	 * STEP 4, modify your GD32xxxx_hal_config.h file to support pwm peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_TIM_MODULE_ENABLED
	 *
	 */
	/*#define BSP_USING_PWM0*/
	/*#define BSP_USING_PWM1*/
	/*#define BSP_USING_PWM2*/
//#define BSP_USING_PWM3
//#define BSP_USING_PWM3_CH2
	/*-------------------------- PWM CONFIG END --------------------------*/

	/*-------------------------- ADC CONFIG BEGIN --------------------------*/

	/** if you want to use adc you can use the following instructions.
	 *
	 * STEP 1, open adc driver framework support in the RT-Thread Settings file
	 *
	 * STEP 2, define macro related to the adc
	 *                 such as     #define BSP_USING_ADC1
	 *
	 * STEP 3, copy your adc init function from GD32xxxx_hal_msp.c generated by GD32cubemx to the end of board.c file
	 *                 such as     void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
	 *
	 * STEP 4, modify your GD32xxxx_hal_config.h file to support adc peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_ADC_MODULE_ENABLED
	 *
	 */

	/*#define BSP_USING_ADC1*/
	/*#define BSP_USING_ADC2*/
	/*#define BSP_USING_ADC3*/

	/*-------------------------- ADC CONFIG END --------------------------*/

	/*-------------------------- WDT CONFIG BEGIN --------------------------*/

	/** if you want to use wdt you can use the following instructions.
	 *
	 * STEP 1, open wdt driver framework support in the RT-Thread Settings file
	 *
	 * STEP 2, modify your GD32xxxx_hal_config.h file to support wdt peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_IWDG_MODULE_ENABLED
	 *
	 */

	/*-------------------------- WDT CONFIG END --------------------------*/

	/*-------------------------- HARDWARE TIMER CONFIG BEGIN --------------------------*/

	/** if you want to use hardware timer you can use the following instructions.
	 *
	 * STEP 1, open hwtimer driver framework support in the RT-Thread Settings file
	 *
	 * STEP 2, define macro related to the hwtimer
	 *                 such as     #define BSP_USING_TIM  and
	 *                             #define BSP_USING_TIM1
	 *
	 * STEP 3, copy your hardwire timer init function from GD32xxxx_hal_msp.c generated by GD32cubemx to the end of board.c file
	 *                 such as     void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
	 *
	 * STEP 4, modify your GD32xxxx_hal_config.h file to support hardwere timer peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_TIM_MODULE_ENABLED
	 *
	 */

	/*#define BSP_USING_TIM*/
#ifdef BSP_USING_TIM
	/*#define BSP_USING_TIM15*/
	/*#define BSP_USING_TIM16*/
	/*#define BSP_USING_TIM17*/
#endif

	/*-------------------------- HAREWARE TIMER CONFIG END --------------------------*/

	/*-------------------------- RTC CONFIG BEGIN --------------------------*/

	/** if you want to use rtc(hardware) you can use the following instructions.
	 *
	 * STEP 1, open rtc driver framework(hardware) support in the RT-Thread Settings file
	 *
	 * STEP 2, define macro related to the rtc
	 *                 such as    BSP_USING_ONCHIP_RTC
	 *
	 * STEP 3, modify your GD32xxxx_hal_config.h file to support rtc peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_RTC_MODULE_ENABLED
	 *
	 */
	/*#define BSP_USING_ONCHIP_RTC*/

	/*-------------------------- RTC CONFIG END --------------------------*/

	/*-------------------------- SDIO CONFIG BEGIN --------------------------*/

	/** if you want to use sdio you can use the following instructions.
	 *
	 * STEP 1, open sdio driver framework support in the RT-Thread Settings file
	 *
	 * STEP 2, define macro related to the sdio
	 *                 such as    BSP_USING_SDIO
	 *
	 * STEP 3, copy your sdio init function from GD32xxxx_hal_msp.c generated by GD32cubemx to the end of board.c file
	 *                 such as     void HAL_SD_MspInit(SD_HandleTypeDef* hsd)
	 *
	 * STEP 4, modify your GD32xxxx_hal_config.h file to support sdio peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_SD_MODULE_ENABLED
	 *
	 * STEP 5, config your device file system or another applications
	 *
	 */

	/*#define BSP_USING_SDIO*/

	/*-------------------------- SDIO CONFIG END --------------------------*/

	/*-------------------------- ETH CONFIG BEGIN --------------------------*/

	/** if you want to use eth you can use the following instructions.
	 *
	 * STEP 1, define macro related to the eth
	 *                 such as    BSP_USING_ETH
	 *
	 * STEP 2, copy your eth init function from GD32xxxx_hal_msp.c generated by GD32cubemx to the end if board.c file
	 *                 such as     void HAL_ETH_MspInit(ETH_HandleTypeDef* heth)
	 *
	 * STEP 3, modify your GD32xxxx_hal_config.h file to support eth peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_ETH_MODULE_ENABLED
	 *
	 * STEP 4, config your phy type
	 *                 such as     #define PHY_USING_LAN8720A
	 *                             #define PHY_USING_DM9161CEP
	 *                             #define PHY_USING_DP83848C
	 * STEP 5, implement your phy reset function in the end of board.c file
	 *                 void phy_reset(void)
	 *
	 * STEP 6, config your lwip or other network stack
	 *
	 */

#define BSP_USING_ETH
#ifdef BSP_USING_ETH
//#define PHY_USING_LAN8720A
	/*#define PHY_USING_DM9161CEP*/
	/*#define PHY_USING_DP83848C*/
#endif
	/*-------------------------- ETH CONFIG END --------------------------*/

	/*-------------------------- USB HOST CONFIG BEGIN --------------------------*/

	/** if you want to use usb host you can use the following instructions.
	 *
	 * STEP 1, open usb host driver framework support in the RT-Thread Settings file
	 *
	 * STEP 2, define macro related to the usb host
	 *                 such as    BSP_USING_USBHOST
	 *
	 * STEP 3, copy your usb host init function from GD32xxxx_hal_msp.c generated by GD32cubemx to the end of board.c file
	 *                 such as     void HAL_HCD_MspInit(HCD_HandleTypeDef* hhcd)
	 *
	 * STEP 4, config your usb peripheral clock in SystemClock_Config() generated by GD32CubeMX and replace this function in board.c
	 *
	 * STEP 5, modify your GD32xxxx_hal_config.h file to support usb host peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_HCD_MODULE_ENABLED
	 *
	 */

	/*#define BSP_USING_USBHOST*/

	/*-------------------------- USB HOST CONFIG END --------------------------*/

	/*-------------------------- USB DEVICE CONFIG BEGIN --------------------------*/

	/** if you want to use usb device you can use the following instructions.
	 *
	 * STEP 1, open usb device driver framework support in the RT-Thread Settings file
	 *
	 * STEP 2 define macro related to the usb device
	 *                 such as    BSP_USING_USBDEVICE
	 *
	 * STEP 3, copy your usb device init function from GD32xxxx_hal_msp.c generated by GD32cubemx to the end of board.c file
	 *                 such as     void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd)
	 *
	 * STEP 4, config your usb peripheral clock in SystemClock_Config() generated by GD32CubeMX and replace this function in board.c
	 *
	 * STEP 5, modify your GD32xxxx_hal_config.h file to support usb device peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_PCD_MODULE_ENABLED
	 *
	 */

	/*#define BSP_USING_USBDEVICE*/

	/*-------------------------- USB DEVICE CONFIG END --------------------------*/

	/*-------------------------- ON_CHIP_FLASH CONFIG BEGIN --------------------------*/

	/** if you want to use on chip flash you can use the following instructions.
	 *
	 * STEP 1 define macro related to the on chip flash
	 *                 such as    BSP_USING_ON_CHIP_FLASH
	 *
	 * STEP 2, modify your GD32xxxx_hal_config.h file to support on chip flash peripherals. define macro related to the peripherals
	 *                 such as     #define HAL_FLASH_MODULE_ENABLED
	 *
	 */

#define BSP_USING_ON_CHIP_FLASH

	/*-------------------------- ON_CHIP_FLASH CONFIG END --------------------------*/

#ifdef __cplusplus
}
#endif

#endif

//*** <<< end of configuration section >>>    ***
